using System;
using System.Collections.Generic;
using ns26;
using ns27;
using Triton.Game.Mono;

namespace Triton.Game.Mapping
{
	[Attribute38("GVGLaserGun")]
	public class GVGLaserGun : MonoBehaviour
	{
		[Attribute38("GVGLaserGun.AngleDef")]
		public class AngleDef : MonoClass
		{
			public bool m_Default => method_2<bool>("m_Default");

			public float m_Angle => method_2<float>("m_Angle");

			public Spell m_ImpactSpell => method_3<Spell>("m_ImpactSpell");

			public AngleDef(IntPtr address, string className)
				: base(address, className)
			{
			}

			public AngleDef(IntPtr address)
				: this(address, "AngleDef")
			{
			}

			public int CustomBehaviorListCompare(AngleDef def1, AngleDef def2)
			{
				return method_11<int>("CustomBehaviorListCompare", new object[2] { def1, def2 });
			}
		}

		public GameObject m_GunLever => method_3<GameObject>("m_GunLever");

		public Spell m_PullLeverSpell => method_3<Spell>("m_PullLeverSpell");

		public GameObject m_GunRotator => method_3<GameObject>("m_GunRotator");

		public GameObject m_RotateLeftButton => method_3<GameObject>("m_RotateLeftButton");

		public GameObject m_RotateRightButton => method_3<GameObject>("m_RotateRightButton");

		public Spell m_StartRotationSpell => method_3<Spell>("m_StartRotationSpell");

		public Spell m_StopRotationSpell => method_3<Spell>("m_StopRotationSpell");

		public float m_RotationSpeed => method_2<float>("m_RotationSpeed");

		public List<AngleDef> m_AngleDefs => method_3<Class271<AngleDef>>("m_AngleDefs")?.method_25();

		public bool m_DebugShowGunAngle => method_2<bool>("m_DebugShowGunAngle");

		public List<int> m_sortedAngleDefIndexes => method_3<Class270<int>>("m_sortedAngleDefIndexes")?.method_25();

		public int m_rotationDir => method_2<int>("m_rotationDir");

		public int m_requestedRotationDir => method_2<int>("m_requestedRotationDir");

		public float m_angle => method_2<float>("m_angle");

		public int m_angleIndex => method_2<int>("m_angleIndex");

		public int m_minAngleIndex => method_2<int>("m_minAngleIndex");

		public int m_maxAngleIndex => method_2<int>("m_maxAngleIndex");

		public bool m_leverEffectsActive => method_2<bool>("m_leverEffectsActive");

		public GVGLaserGun(IntPtr address, string className)
			: base(address, className)
		{
		}

		public GVGLaserGun(IntPtr address)
			: this(address, "GVGLaserGun")
		{
		}

		public static int AngleDefSortComparison(AngleDef def1, AngleDef def2)
		{
			return MonoClass.smethod_14<int>(TritonHs.MainAssemblyPath, "", "GVGLaserGun", "AngleDefSortComparison", new object[2] { def1, def2 });
		}

		public void Awake()
		{
			method_8("Awake");
		}

		public void Update()
		{
			method_8("Update");
		}

		public AngleDef GetAngleDef()
		{
			return method_14<AngleDef>("GetAngleDef", Array.Empty<object>());
		}

		public void HandleRotation()
		{
			method_8("HandleRotation");
		}

		public bool ShouldStartRotating()
		{
			return method_11<bool>("ShouldStartRotating", Array.Empty<object>());
		}

		public void RotateLeft()
		{
			method_8("RotateLeft");
		}

		public void RotateRight()
		{
			method_8("RotateRight");
		}

		public void StartRotating(int dir)
		{
			method_8("StartRotating", dir);
		}

		public void StopRotating()
		{
			method_8("StopRotating");
		}

		public void SetAngle(float angle)
		{
			method_8("SetAngle", angle);
		}

		public void HandleLever()
		{
			method_8("HandleLever");
		}

		public void PullLever()
		{
			method_8("PullLever");
		}

		public void OnPullLeverSpellFinished(Spell spell, object userData)
		{
			method_8("OnPullLeverSpellFinished", spell, userData);
		}

		public void OnImpactSpellFinished(Spell spell, object userData)
		{
			method_8("OnImpactSpellFinished", spell, userData);
		}

		public bool IsOver(GameObject go)
		{
			return method_11<bool>("IsOver", new object[1] { go });
		}
	}
}
